package com.quiz.bis.service;

import com.quiz.bis.domain.bo.PaperBO;
import com.quiz.bis.domain.model.PaperQuery;
import com.quiz.bis.domain.model.PreviewOptions;
import com.quiz.bis.domain.vo.PaperListVO;
import com.quiz.bis.domain.vo.PaperPreviewVO;
import com.quiz.bis.domain.vo.PaperVO;
import com.quiz.common.core.domain.R;
import com.quiz.common.mybatis.core.page.PageQuery;
import com.quiz.common.mybatis.core.page.TableDataInfo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 试卷服务层接口
 * @author ahuan
 */
public interface IPaperService {

    /**
     * 创建试卷
     * @param paperBO 试卷数据
     * @return 试卷ID
     */
    R<Long> createPaper(PaperBO paperBO);


    /**
     * 获取试卷详情
     * @param paperId 试卷ID
     * @return 试卷详情
     */
    R<PaperVO> getPaperDetail(Long paperId);

    /**
     * 更新试卷
     * @param paperBO 试卷数据
     * @return 更新结果
     */
    R<Void> updatePaper(PaperBO paperBO);

    /**
     * 删除试卷
     * @param paperId 试卷ID
     * @return 删除结果
     */
    R<Void> deletePaper(Long paperId);

    /**
     * 预览试卷
     * @param paperId 试卷ID
     * @return 预览数据
     */
    public R<PaperPreviewVO> previewPaper(Long paperId, PreviewOptions options);

    /**
     * 导出试卷
     * @param paperId 试卷ID
     * @param exportType 导出类型(pdf/word)
     */
    void exportPaper(Long paperId, String exportType, PreviewOptions options,
                     HttpServletResponse response, HttpServletRequest request);


    /**
     * 分页查询试卷列表
     */
    TableDataInfo<PaperListVO> pagePaperList(PageQuery pageQuery, PaperQuery query);

    /**
     * 批量更新试卷状态
     */
    void updateStatusBatch(List<Long> ids, Integer status);

    /**
     * 删除试卷
     */
    void deletePaper(List<Long> ids);

    /**
     * 恢复已删除的试卷
     */
    void recoverPaper(List<Long> ids);
}